# -*- coding: utf-8 -*-
# 命令行界面模块

import argparse
import os
from core.mobaxterm import MobaXtermGenerator
from core.securecrt import SecureCRTGenerator
from core.xshell import XShellGenerator
from utils.template import get_template_path, download_template, create_default_template, create_machine_list_template

def parse_args():
    """解析命令行参数"""
    parser = argparse.ArgumentParser(description="SSH客户端会话生成工具")
    
    # 客户端类型
    parser.add_argument("--client", "-c", choices=["mobaxterm", "securecrt", "xshell"], 
                        help="SSH客户端类型")
    
    # 操作类型
    group = parser.add_mutually_exclusive_group(required=True)
    group.add_argument("--generate", "-g", action="store_true", help="生成会话文件")
    group.add_argument("--download-template", "-d", action="store_true", help="下载模板")
    group.add_argument("--create-template", "-t", action="store_true", help="创建默认模板")
    group.add_argument("--create-machine-list", "-m", action="store_true", help="创建机器列表模板")
    
    # 生成会话文件的参数
    parser.add_argument("--machines", help="机器列表文件路径 (Excel/CSV)")
    parser.add_argument("--sheet", default="Sheet1", help="Excel表格名 (默认: Sheet1)")
    parser.add_argument("--template", help="模板文件路径")
    parser.add_argument("--output", "-o", default=".", help="输出目录 (默认: 当前目录)")
    parser.add_argument("--format", "-f", choices=["xlsx", "csv"], default="xlsx", 
                        help="机器列表文件格式 (默认: xlsx)")
    
    # 解析参数
    args = parser.parse_args()
    
    # 验证参数组合
    if args.generate and (not args.machines or not args.template or not args.client):
        parser.error("--generate 需要同时指定 --client, --machines 和 --template")
        
    if args.download_template and not args.client:
        parser.error("--download-template 需要指定 --client")
        
    if args.create_template and not args.client:
        parser.error("--create-template 需要指定 --client")
    
    return args

def main():
    """命令行主程序"""
    args = parse_args()
    
    try:
        # 处理创建机器列表模板
        if args.create_machine_list:
            output_file = f"machines_template.{args.format}"
            if args.output != ".":
                if not os.path.exists(args.output):
                    os.makedirs(args.output)
                output_file = os.path.join(args.output, output_file)
            
            print(f"正在创建机器列表模板文件...")
            if create_machine_list_template(output_file, args.format):
                print(f"已成功创建机器列表模板: {output_file}")
            else:
                print(f"创建机器列表模板失败")
            return
            
        # 处理下载模板
        if args.download_template:
            print(f"正在下载 {args.client} 模板...")
            success = download_template(args.client, args.output)
            if success:
                print(f"已成功下载 {args.client} 模板")
            else:
                print(f"下载 {args.client} 模板失败")
            return
        
        # 处理创建默认模板
        if args.create_template:
            print(f"正在创建 {args.client} 默认模板...")
            success = create_default_template(args.client, args.output)
            if success:
                print(f"已成功创建 {args.client} 默认模板")
            else:
                print(f"创建 {args.client} 默认模板失败")
            return
        
        # 处理生成会话文件
        if args.generate:
            # 检查文件存在
            if not os.path.exists(args.machines):
                print(f"错误: 机器列表文件不存在 {args.machines}")
                return
            
            if not os.path.exists(args.template):
                print(f"错误: 模板文件不存在 {args.template}")
                return
            
            # 选择生成器
            generator = None
            if args.client == "mobaxterm":
                generator = MobaXtermGenerator(args.template)
            elif args.client == "securecrt":
                generator = SecureCRTGenerator(args.template)
            elif args.client == "xshell":
                generator = XShellGenerator(args.template)
            
            if generator:
                print(f"正在生成 {args.client} 会话文件...")
                # 传递用户指定的输出目录
                success = generator.generate_all_sessions(
                    args.machines, 
                    output_dir=args.output,
                    sheet_name=args.sheet
                )
                
                if success:
                    output_path = os.path.join(args.output, 'sessions', args.client)
                    print(f"已成功生成 {args.client} 会话文件")
                    print(f"保存路径: {output_path}")
                else:
                    print(f"生成 {args.client} 会话文件失败")
            else:
                print(f"错误: 未知的客户端类型 {args.client}")
    
    except Exception as e:
        print(f"错误: {e}")

if __name__ == "__main__":
    main() 